import createElement from "./createElement";
import updateChildren from "./update";

export default function patchVnode(oldVnode, newVnode) {
  // 两个对象相等则不做任何操作
  if (oldVnode === newVnode) return;
  // 新的 node 有 text 则直接将新的 text 覆盖掉旧的
  if (
    newVnode.text &&
    (newVnode.children === undefined || newVnode.children.length === 0)
  ) {
    if (newVnode.text !== oldVnode.text) {
      /* 新旧节点的文本不同则用新的文本覆盖旧的文本 */
      console.log(oldVnode);
      oldVnode.elm.innerText = newVnode.text;
    }
  } else {
    /* 没有text有children的情况 */
    if (oldVnode.children && oldVnode.children.length) {
      /* 判断旧节点有children - 需要和新节点的每一层进行比较(精细化比较) */
      updateChildren(oldVnode.elm, oldVnode.children, newVnode.children);
    } else {
      /* 判断旧节点没有children */
      if (newVnode.children && newVnode.children.length) {
        /* 判断新节点有children */
        oldVnode.elm.innerText = "";
        newVnode.children.forEach((item) => {
          oldVnode.elm.appendChild(createElement(item));
        });
      }
    }
  }
}
